﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;
using System.Collections.ObjectModel;
using System.Data;
using System.Windows.Media.Imaging;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows.Controls;
using System.Globalization;
using produccion.modelo;
using produccion.AccesoDatos;
using produccion.clases;
using produccion.modulos;
using System.Windows.Input;
using System.Collections.Specialized;
using produccion.forms;
using produccion.reportes;
using Outlook = Microsoft.Office.Interop.Outlook;
using System.Threading;

namespace produccion.vistamodelo
{
    class VMEntregarReparaciones : ViewModelBase
    {
        #region Campos
        private MDOgeneral _mod = new MDOgeneral();
        private CLSMAECLIP _cliente = new CLSMAECLIP();
        private MEntregarReparaciones _rep = new MEntregarReparaciones();
        private ProcesoProduccionRepositorio _repositorio = new ProcesoProduccionRepositorio();
        #endregion

        #region Constructor
        public VMEntregarReparaciones()
        {
            try
            {
                lisreparaciones.CollectionChanged += OnCollectionChanged;
                lisclientes = _cliente.listaClienteReparacionesListas();
                strNumero = _rep.consultarRemision();
                if (MDOgeneral.conexion == null || MDOgeneral.conexion.State == ConnectionState.Closed)
                {
                    MDOgeneral.conectar();
                }
                strTituloVentana = "Entregar Reparaciones - Usuario: " + MDOgeneral.usuario + " - [FRMEntregarReparaciones]";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        #endregion

        #region Propiedades

        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; base.OnPropertyChanged("strTituloVentana"); }
        }

        private List<CLSMAECLIP> _lisclientes = new List<CLSMAECLIP>();
        public List<CLSMAECLIP> lisclientes
        {
            get { return _lisclientes; }
            set { _lisclientes = value; base.OnPropertyChanged("lisclientes"); }
        }

        private CLSMAECLIP _selcliente = new CLSMAECLIP();
        public CLSMAECLIP selcliente
        {
            get { return _selcliente; }
            set
            {
                _selcliente = value;
                base.OnPropertyChanged("selcliente");
                if (selcliente != null)
                {
                    if (selcliente.CODCLI_CLI != null)
                    {
                        consultarReparaciones(selcliente.CODCLI_CLI);
                    }
                }
            }
        }

        private ObservableCollection<VMReparacionesaEntregar> _lisreparaciones = new ObservableCollection<VMReparacionesaEntregar>();
        public ObservableCollection<VMReparacionesaEntregar> lisreparaciones
        {
            get { return _lisreparaciones; }
            set { _lisreparaciones = value; base.OnPropertyChanged("lisreparaciones"); }
        }

        private VMReparacionesaEntregar _selreparacion;
        public VMReparacionesaEntregar selreparacion
        {
            get { return _selreparacion; }
            set
            {
                _selreparacion = value;
                base.OnPropertyChanged("selreparacion");
                if (selreparacion != null) 
                {
                    visorFotoReferencia.strCodigo = selreparacion.strReferencia;
                    visorFotoReferencia.strColor = selreparacion.strColor;
                }
            }
        }

        private string _strNumero;
        public string strNumero
        {
            get { return _strNumero; }
            set {  _strNumero = value;  base.OnPropertyChanged("strNumero"); }
        }

        private string _strMensaje;
        public string strMensaje
        {
            get { return _strMensaje; }
            set { _strMensaje = value; base.OnPropertyChanged("strMensaje"); }
        }

        private VMvisorFotoReferencia _visorFotoReferencia = new VMvisorFotoReferencia();
        public VMvisorFotoReferencia visorFotoReferencia
        {
            get { return _visorFotoReferencia; }
            set { _visorFotoReferencia = value; base.OnPropertyChanged("visorFotoReferencia"); }
        }

        private Boolean _logValido = false;
        public Boolean logValido
        {
            get { return _logValido; }
            set { _logValido = value; base.OnPropertyChanged("logValido"); }
        }

        private Boolean _logTodos = true;
        public Boolean logTodos
        {
            get { return _logTodos; }
            set
            {
                _logTodos = value;
                if (_logTodos)
                {
                    selTodos();
                }
                else
                {
                    selNingun();
                }
                base.OnPropertyChanged("logTodos");
            }
        }

        private Int32 _numTotal = 0;
        public Int32 numTotal
        {
            get { return _numTotal; }
            set { _numTotal = value; base.OnPropertyChanged("numTotal"); }
        }

        #endregion

        #region Comandos

        RelayCommand _cmdSalir;
        public ICommand cmdSalir
        {
            get
            {
                if (_cmdSalir == null)
                {
                    _cmdSalir = new RelayCommand(Salir);
                }
                return _cmdSalir;
            }
        }

        RelayCommand _cmdEnviar;
        public ICommand cmdEnviar
        {
            get
            {
                if (_cmdEnviar == null)
                {
                    _cmdEnviar = new RelayCommand(r => enviar());
                }
                return _cmdEnviar;
            }
        }

        #endregion

        #region Metodos

        void consultarReparaciones(string strCliente)
        {
            try
            {
                int numContador = 0;
                List<MEntregarReparaciones> lisrep = new List<MEntregarReparaciones>();
                lisrep = _rep.listarReparaciones(strCliente);

                List<VMReparacionesaEntregar> all = (from lis in lisrep select new VMReparacionesaEntregar(lis)).ToList();
                foreach (VMReparacionesaEntregar xx in all)
                {
                    xx.PropertyChanged += OnPropertyChanged;
                    xx.logIncluir = true;
                    numContador = numContador + 1;
                }
                lisreparaciones.Clear();
                lisreparaciones = new ObservableCollection<VMReparacionesaEntregar>(all);
                if (lisreparaciones.Count > 0)
                    logValido = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            try
            {
                if (e.NewItems != null && e.NewItems.Count > 0)
                {
                    foreach (VMReparacionesaEntregar pro in e.NewItems)
                    {
                        pro.PropertyChanged += OnPropertyChanged;
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            numTotal = 0;
            foreach (var item in lisreparaciones.Where(w => w.logIncluir.Equals(true)))
            {
                numTotal = numTotal + 1;
            }
            if (numTotal > 0)
                logValido = true;
        }

        public void enviar()
        {
            try
            {

                string strNumeros = "";

                foreach (VMReparacionesaEntregar rep in lisreparaciones)
                {
                    if (rep.logIncluir)
                    {
                        strNumeros = strNumeros + rep.strOrden.PadRight(7, ' ') + "-";
                    }
                }

                if (strNumeros.Length > 2)
                {
                    List<MEntregarReparaciones> lstReparaciones = (from rep in lisreparaciones where rep.logIncluir.Equals(true) select rep.getReparaciones()).ToList();

                    if (_repositorio.guardarEntregarReparaciones(selcliente.CODCLI_CLI, strMensaje, strNumero, lstReparaciones))                    
                    {
                        MessageBox.Show("Reparaciones enviadas.: ", "Confirmación", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK);
                        imprimir();
                        limpiar();
                    }
                    else
                    {
                        MessageBox.Show("No se enviaron las reparaciones.", "Confirmación", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
                    }                    
                }
                else
                {
                    MessageBox.Show("No seleccionó reparaciones  para enviar.", "Confirmación", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        void limpiar()
        {
            try
            {
                lisreparaciones.Clear();
                lisclientes.Clear();
                selcliente = null;
                lisclientes = _cliente.listaClienteReparacionesaEntregar();
                numTotal = 0;
                strMensaje = null;
                strNumero = _rep.consultarRemision();
                if (visorFotoReferencia != null)
                {
                    if (visorFotoReferencia.strCodigo != null)
                    {
                        visorFotoReferencia.strCodigo = "";
                        visorFotoReferencia.strColor = "";
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        void imprimir()
        {
            try
            {

                DataTable dtEncabezado = new DataTable("dtEncabezado");
                dtEncabezado.Columns.Add("STREMPRESA");
                dtEncabezado.Columns.Add("STRNIT");
                dtEncabezado.Columns.Add("STRDIRECCION");
                dtEncabezado.Columns.Add("STRCIUDAD");
                dtEncabezado.Columns.Add("STRTELEFONO");
                dtEncabezado.Columns.Add("STRFAX");
                dtEncabezado.Columns.Add("STRREMISION");
                dtEncabezado.Columns.Add("STREPARACIONES");
                dtEncabezado.Columns.Add("STRFECHA");
                dtEncabezado.Columns.Add("STRMENSAJE");
                dtEncabezado.Columns.Add("STRCLIENTE");

                DataRow drEncabezado = dtEncabezado.NewRow();
                drEncabezado["STREMPRESA"] = MDOgeneral.strEmpresaImprime;
                drEncabezado["STRNIT"] = MDOgeneral.strEmpresaImprimeNit;
                drEncabezado["STRDIRECCION"] = MDOgeneral.strEmpresaImprimeSoloDireccion;
                drEncabezado["STRCIUDAD"] = MDOgeneral.strEmpresaImprimeCiudad;
                drEncabezado["STRTELEFONO"] = MDOgeneral.strEmpresaImprimeSoloTelefono;
                drEncabezado["STRFAX"] = MDOgeneral.strEmpresaImprimeFax;
                drEncabezado["STRREMISION"] = "*" + strNumero.Trim() + "*";
                drEncabezado["STREPARACIONES"] = "Entrega de Reparaciones";
                drEncabezado["STRFECHA"] = DateTime.Now.ToString("dd/MM/yyyy");
                drEncabezado["STRMENSAJE"] = strMensaje;
                if (selcliente != null)
                    drEncabezado["STRCLIENTE"] = selcliente.NOMCLI_CLI;
                else
                    drEncabezado["STRCLIENTE"] = "";
                dtEncabezado.Rows.Add(drEncabezado);


                DataTable dtDetalle = new DataTable("dtDetalle");
                dtDetalle.Columns.Add("strReparacion");
                dtDetalle.Columns.Add("numConsecutivo", System.Type.GetType("System.Int32"));
                dtDetalle.Columns.Add("strOrden");
                dtDetalle.Columns.Add("strReferencia");
                dtDetalle.Columns.Add("strNombreReferencia");
                dtDetalle.Columns.Add("strColor");
                dtDetalle.Columns.Add("strNombreColor");
                dtDetalle.Columns.Add("strTalla");
                dtDetalle.Columns.Add("strTipo");
                dtDetalle.Columns.Add("strMotivos");
                dtDetalle.Columns.Add("strProcesos");
                dtDetalle.Columns.Add("strDetalle");

                string strMotivos = "";
                string strProcesos = "";

                foreach (VMReparacionesaEntregar rep in lisreparaciones)
                {
                    if (rep.logIncluir)
                    {
                        DataRow drDetalle = dtDetalle.NewRow();

                        drDetalle["strReparacion"] = rep.strReparacion;
                        drDetalle["numConsecutivo"] = rep.numConsecutivo;
                        drDetalle["strOrden"] = rep.strOrden;
                        drDetalle["strReferencia"] = rep.strReferencia;
                        drDetalle["strNombreReferencia"] = rep.strNombreReferencia;
                        drDetalle["strColor"] = rep.strColor;
                        drDetalle["strNombreColor"] = rep.strNombreColor;
                        drDetalle["strTalla"] = rep.strTalla;
                        drDetalle["strTipo"] = rep.strTipo;

                        strMotivos = rep.strMotivo1 + " - " + rep.strMotivo2 + " - " + rep.strMotivo3 + " - " + rep.strMotivo4 + " - " + rep.strMotivo5;
                        strProcesos = rep.strProceso1 + " - " + rep.strProceso2 + " - " + rep.strProceso3 + " - " + rep.strProceso4 + " - " + rep.strProceso5;

                        drDetalle["strMotivos"] = strMotivos;
                        drDetalle["strProcesos"] = strProcesos;
                        drDetalle["strDetalle"] = rep.strDetalle;
                        dtDetalle.Rows.Add(drDetalle);
                    }
                }

                dtEncabezado.TableName = "dtEncabezado";
                dtDetalle.TableName = "dtDetalle";
                DataSet ds = new DataSet("dsEntregarReparaciones");
                ds.Tables.Add(dtEncabezado);
                ds.Tables.Add(dtDetalle);

                Vista vista = new Vista { ds = ds, reporte = @"reportes\rptEntrgarReparaciones.rpt" };

                vista.Show();

                // Para envia correo con el reporte adjunto

                //#region Variables para preguntar si desea envia correo
                //string StrCaptionBox = "Confirmation";
                //string StrMensajeBox = "Desea enviar el correo al cliente?";
                //MessageBoxButton buttons = MessageBoxButton.YesNo;
                //MessageBoxImage icon = MessageBoxImage.Question;
                //#endregion

                //if (MessageBox.Show(StrMensajeBox, StrCaptionBox, buttons, icon) == MessageBoxResult.Yes)//Para enviar el correo
                //{
                //    try
                //    {

                //        #region FormaComoSeExporta
                //        String StrNombreConRutaReporteOriginal, StrRutaDondeSeExporta, StrRutaArmadaParaEmailOutlook, StrNombreNuevoDocumentoExportado, StrExtencionArchivo, StrCorreosElectronicosDondeSeEnviaElCorreo = "";

                //        StrNombreNuevoDocumentoExportado = "Entrega de Reparaciones";
                //        StrExtencionArchivo = "pdf";

                //        StrNombreConRutaReporteOriginal = @"reportes\rptEntrgarReparaciones.rpt";// Asignamos la ruta donde esta el reporte origina que se va a cargar
                //        StrRutaDondeSeExporta = @"\\10.1.1.10\planos\";// Asignamos la ruta donde se exportara el archivo

                //        Vista FrmReporte = new Vista();// Cargamos las clases que necesitamos que estan en este formulario
                //        FrmReporte.ExportarCrystalReport(ds, StrNombreConRutaReporteOriginal, StrRutaDondeSeExporta, StrNombreNuevoDocumentoExportado, StrExtencionArchivo);// Enviamos la impresion
                //        #endregion

                //        #region FJRF - EnviamosElEmailOutlook

                //        _cliente.CODCLI_CLI = selcliente.CODCLI_CLI;
                //        _cliente.consultar();

                //        if (String.IsNullOrEmpty(_cliente.EMAIL_CLI.Trim()))
                //            StrCorreosElectronicosDondeSeEnviaElCorreo = "aaa@aaa.com";
                //        else
                //            StrCorreosElectronicosDondeSeEnviaElCorreo = _cliente.EMAIL_CLI;

                //        StrRutaArmadaParaEmailOutlook = StrRutaDondeSeExporta + StrNombreNuevoDocumentoExportado + "." + StrExtencionArchivo;
                //        try
                //        {
                //            // Creación de la instancia de Outlook.
                //            Outlook.Application oApp = new Outlook.Application();
                //            // Crear un nuevo elemento de correo.
                //            Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
                //            // Establecer HTMLBody.
                //            // Añadir el cuerpo del correo electrónico
                //            oMsg.HTMLBody = "Señores " + _cliente.NOMCLI_CLI + ",  Estamos adjuntando relación de reparaciones enviadas el dÍa de hoy." ;
                //            // Añadir un archivo adjunto.
                //            String sDisplayName = "RemisionNo_" + strNumero + " ";
                //            int iPosition = (int)oMsg.Body.Length + 1;
                //            int iAttachType = (int)Outlook.OlAttachmentType.olByValue;
                //            // Se adjunta el archivo
                //            Outlook.Attachment oAttach = oMsg.Attachments.Add(StrRutaArmadaParaEmailOutlook, iAttachType, iPosition, sDisplayName);
                //            // Línea de asunto
                //            oMsg.Subject = "Anuncio envio de reparaciones. Remisión No [ " + strNumero + " ]";
                //            // Añadir un destinatario.
                //            Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients;
                //            // Cambie el destinatario en la línea siguiente si es necesario.
                //            Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add(StrCorreosElectronicosDondeSeEnviaElCorreo);
                //            oRecip.Resolve();
                //            // Para Enviar sin mostrar outlook.
                //            //oMsg.Send(); 
                //            // Para mostrar el outlook antes de enviar
                //            oMsg.Display();
                //            // Se Limpian los objetos creados
                //            oRecip = null;
                //            oRecips = null;
                //            oMsg = null;
                //            oApp = null;
                //        }
                //        catch (Exception ex) { MessageBox.Show(ex.Message); }

                //        #endregion
                //    }
                //    catch (Exception ex) { MessageBox.Show(ex.Message); }//FJRF - Si hay algun error lo reportamos
                //}
                //else
                //{
                //    MessageBoxResult result = MessageBox.Show("Envio de correos por Outlook cancelado", "PROCESO CANCELADO");
                //}
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void selTodos()
        {
            foreach (VMReparacionesaEntregar lis in lisreparaciones)
            {
                lis.logIncluir = true;
            }
            logValido = true;
        }

        private void selNingun()
        {
            foreach (VMReparacionesaEntregar lis in lisreparaciones)
            {
                lis.logIncluir = false;
            }
            logValido = false;
        }

        void Salir(Object frmformulario)
        {
            ((Window)frmformulario).Close();
        }
        #endregion
    }

    #region Vista-modelo
    public class VMReparacionesaEntregar : ViewModelBase, IDataErrorInfo
    {

        #region Campos
        private MEntregarReparaciones _reparaciones = new MEntregarReparaciones();
        #endregion

        #region Constructor

        public VMReparacionesaEntregar(MEntregarReparaciones reparaciones)
        {
            _reparaciones = reparaciones;
        }

        public VMReparacionesaEntregar()
        {
            
        }

        #endregion

        #region Propiedades

        public string strOrden
        {
            get { return _reparaciones.strOrden; }
            set { _reparaciones.strOrden = value; base.OnPropertyChanged("strOrden"); }
        }

        public string strReparacion
        {
            get { return _reparaciones.strReparacion; }
            set { _reparaciones.strReparacion = value; base.OnPropertyChanged("strReparacion"); }
        }

        public Int32 numConsecutivo
        {
            get { return _reparaciones.numConsecutivo; }
            set { _reparaciones.numConsecutivo = value; base.OnPropertyChanged("numConsecutivo"); }
        }

        public string strReferencia
        {
            get { return _reparaciones.strReferencia; }
            set { _reparaciones.strReferencia = value; base.OnPropertyChanged("strReferencia"); }
        }

        public string strNombreReferencia
        {
            get { return _reparaciones.strNombreReferencia; }
            set { _reparaciones.strNombreReferencia = value; base.OnPropertyChanged("strNombreReferencia"); }
        }

        public string strColor
        {
            get { return _reparaciones.strColor; }
            set { _reparaciones.strColor = value; base.OnPropertyChanged("strColor"); }
        }

        public string strNombreColor
        {
            get { return _reparaciones.strNombreColor; }
            set { _reparaciones.strNombreColor = value; base.OnPropertyChanged("strNombreColor"); }
        }

        public string strTalla
        {
            get { return _reparaciones.strTalla; }
            set { _reparaciones.strTalla = value; base.OnPropertyChanged("strTalla"); }
        }

        public string strTipo
        {
            get { return _reparaciones.strTipo; }
            set { _reparaciones.strTipo = value; base.OnPropertyChanged("strTipo"); }
        }

        public string strDetalle
        {
            get { return _reparaciones.strDetalle; }
            set { _reparaciones.strDetalle = value; base.OnPropertyChanged("strDetalle"); }
        }

        public string strMotivo1
        {
            get { return _reparaciones.strMotivo1; }
            set { _reparaciones.strMotivo1 = value; base.OnPropertyChanged("strMotivo1"); }
        }

        public string strMotivo2
        {
            get { return _reparaciones.strMotivo2; }
            set { _reparaciones.strMotivo2 = value; base.OnPropertyChanged("strMotivo2"); }
        }

        public string strMotivo3
        {
            get { return _reparaciones.strMotivo3; }
            set { _reparaciones.strMotivo3 = value; base.OnPropertyChanged("strMotivo3"); }
        }

        public string strMotivo4
        {
            get { return _reparaciones.strMotivo4; }
            set { _reparaciones.strMotivo4 = value; base.OnPropertyChanged("strMotivo4"); }
        }

        public string strMotivo5
        {
            get { return _reparaciones.strMotivo5; }
            set { _reparaciones.strMotivo5= value; base.OnPropertyChanged("strMotivo5"); }
        }

        public string strProceso1
        {
            get { return _reparaciones.strProceso1; }
            set { _reparaciones.strProceso1 = value; base.OnPropertyChanged("strProceso1"); }
        }

        public string strProceso2
        {
            get { return _reparaciones.strProceso2; }
            set { _reparaciones.strProceso2 = value; base.OnPropertyChanged("strProceso2"); }
        }

        public string strProceso3
        {
            get { return _reparaciones.strProceso3; }
            set { _reparaciones.strProceso3 = value; base.OnPropertyChanged("strProceso3"); }
        }

        public string strProceso4
        {
            get { return _reparaciones.strProceso4; }
            set { _reparaciones.strProceso4 = value; base.OnPropertyChanged("strProceso4"); }
        }

        public string strProceso5
        {
            get { return _reparaciones.strProceso5; }
            set { _reparaciones.strProceso5 = value; base.OnPropertyChanged("strProceso5"); }
        }

        public string strCodigoMotivo1
        {
            get { return _reparaciones.strCodigoMotivo1; }
            set { _reparaciones.strCodigoMotivo1 = value; base.OnPropertyChanged("strCodigoMotivo1"); }
        }

        public string strCodigoMotivo2
        {
            get { return _reparaciones.strCodigoMotivo2; }
            set { _reparaciones.strCodigoMotivo2 = value; base.OnPropertyChanged("strCodigoMotivo2"); }
        }

        public string strCodigoMotivo3
        {
            get { return _reparaciones.strCodigoMotivo3; }
            set { _reparaciones.strCodigoMotivo3 = value; base.OnPropertyChanged("strCodigoMotivo3"); }
        }

        public string strCodigoMotivo4
        {
            get { return _reparaciones.strCodigoMotivo4; }
            set { _reparaciones.strCodigoMotivo4 = value; base.OnPropertyChanged("strCodigoMotivo4"); }
        }

        public string strCodigoMotivo5
        {
            get { return _reparaciones.strCodigoMotivo5; }
            set { _reparaciones.strCodigoMotivo5 = value; base.OnPropertyChanged("strCodigoMotivo5"); }
        }

        public string strCodigoProceso1
        {
            get { return _reparaciones.strCodigoProceso1; }
            set { _reparaciones.strCodigoProceso1 = value; base.OnPropertyChanged("strCodigoProceso1"); }
        }

        public string strCodigoProceso2
        {
            get { return _reparaciones.strCodigoProceso2; }
            set { _reparaciones.strCodigoProceso2 = value; base.OnPropertyChanged("strCodigoProceso2"); }
        }

        public string strCodigoProceso3
        {
            get { return _reparaciones.strCodigoProceso3; }
            set { _reparaciones.strCodigoProceso3 = value; base.OnPropertyChanged("strCodigoProceso3"); }
        }

        public string strCodigoProceso4
        {
            get { return _reparaciones.strCodigoProceso4; }
            set { _reparaciones.strCodigoProceso4 = value; base.OnPropertyChanged("strCodigoProceso4"); }
        }

        public string strCodigoProceso5
        {
            get { return _reparaciones.strCodigoProceso5; }
            set { _reparaciones.strCodigoProceso5 = value; base.OnPropertyChanged("strCodigoProceso5"); }
        }

        public string strObservaciones
        {
            get { return _reparaciones.strObservaciones; }
            set { _reparaciones.strObservaciones = value; base.OnPropertyChanged("strObservaciones"); }
        }

        public bool logIncluir
        {
            get { return _reparaciones.logIncluir; }
            set { _reparaciones.logIncluir = value; base.OnPropertyChanged("logIncluir"); }
        }

        #endregion

        #region Metodos

        public MEntregarReparaciones getReparaciones()
        {
            return _reparaciones;
        }

        #endregion

        #region IDataErrorInfo Members

        string IDataErrorInfo.Error { get { return null; } }

        string IDataErrorInfo.this[string propertyName]
        {
            get { return this.GetValidationError(propertyName); }
        }

        #endregion

        #region Validation

        /// <summary>
        /// Returns true if this object has no validation errors.
        /// </summary>
        /// 

        public bool IsValid
        {
            get
            {
                foreach (string property in ValidatedProperties)
                    if (GetValidationError(property) != null)
                        return false;

                return true;
            }
        }

        static readonly string[] ValidatedProperties = 
                    { 
                        "logIncluir"
                    };

        string GetValidationError(string propertyName)
        {
            string error = null;

            if (Array.IndexOf(ValidatedProperties, propertyName) < 0)
                return null;

            //&& CODCPT_NVP.Length==3
            switch (propertyName)
            {
                case "logIncluir":
                    error = this.ValidateSeleccionado();
                    break;
                default:
                    Debug.Fail("Unexpected property being validated on Customer: " + propertyName);
                    break;
            }
            return error;
        }

        string ValidateSeleccionado()
        {
            try
            {
                if (logIncluir == false)
                {
                    return null;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return null;
        }


        #endregion

    }
    #endregion
}
